package com.example.chuankoudemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.TextUtils;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.vi.vioserial.NormalSerial;
import com.vi.vioserial.listener.OnNormalDataListener;
import com.vi.vioserial.util.SerialDataUtils;

public class MainActivity extends AppCompatActivity {
    // 1. 串口设备路径（Android中/dev目录下的串口文件，对应模拟器COM2）
    // 规则：COM1→/dev/ttyS0，COM2→/dev/ttyS1，COM3→/dev/ttyS2（以此类推）
    private static final String DEVICE_PATH = "/dev/ttyS1";
    // 2. 串口参数（必须与Windows端一致）
    private static final int BAUD_RATE = 9600;    // 波特率（常用9600/115200）
    private static final int DATA_BITS = 8;       // 数据位（固定8）
    private static final int STOP_BITS = 1;       // 停止位（固定1）
    private static final int PARITY = 'N';        // 校验位（N=无校验，O=奇校验，E=偶校验）

    // 3. 串口对象与流对象
    private TextView tvReceive;          // 显示接收数据的TextView
    private EditText etSend;             // 输入发送数据的EditText
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvReceive = findViewById(R.id.tv_receive);
        etSend = findViewById(R.id.et_send);
        findViewById(R.id.btn_send).setOnClickListener(v -> sendData());

        // 初始化串口
        initSerialPort();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
    private void initSerialPort() {
        int openStatus =NormalSerial.instance().open(DEVICE_PATH, BAUD_RATE);
        if(openStatus == 0){
            Toast.makeText(this, "打开串口成功", Toast.LENGTH_SHORT).show();
            /**
             * OnNormalDataListener 为串口的接收数据回调，建议在当前类去实现这个接口
             * 不用时记得释放NormalSerial.instance().removeDataListener(this);
             */
            NormalSerial.instance().addDataListener(new OnNormalDataListener() {
                @Override
                public void normalDataBack(String hexData) {
                    //注意，默认接收的类型为hex
                    //需要转换为字符串可调用SerialDataUtils.hexStringToString(hexData)
                    Toast.makeText(MainActivity.this, SerialDataUtils.hexStringToString(hexData), Toast.LENGTH_SHORT).show();
                    tvReceive.setText(SerialDataUtils.hexStringToString(hexData));
                }
            });
        }
    }

    private void sendData() {
        String sendStr = etSend.getText().toString().trim();
        if (TextUtils.isEmpty(sendStr)) {
            Toast.makeText(this, "请输入发送内容", Toast.LENGTH_SHORT).show();
            return;
        }
        NormalSerial.instance().sendHex(SerialDataUtils.stringToHexString(sendStr));
    }

}